'\" t
.\"     Title: ne_set_request_body_buffer
.\"    Author: 
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\"      Date: 29 January 2024
.\"    Manual: neon API reference
.\"    Source: neon 0.33.0
.\"  Language: English
.\"
.TH "NE_SET_REQUEST_BODY_" "3" "29 January 2024" "neon 0.33.0" "neon API reference"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
ne_set_request_body_buffer, ne_set_request_body_fd, ne_set_request_body_provider \- include a message body with a request
.SH "SYNOPSIS"
.sp
.ft B
.nf
#include <ne_request\&.h>
.fi
.ft
.HP \w'void\ ne_set_request_body_buffer('u
.BI "void ne_set_request_body_buffer(ne_request\ *" "req" ", const\ char\ *" "buf" ", size_t\ " "count" ");"
.HP \w'int\ ne_set_request_body_fd('u
.BI "int ne_set_request_body_fd(ne_request\ *" "req" ", int\ " "fd" ", ne_off_t\ " "begin" ", ne_off_t\ " "length" ");"
.HP \w'typedef\ ssize_t\ (*ne_provide_body)('u
.BI "typedef ssize_t (*ne_provide_body)(void\ *" "userdata" ", char\ *" "data" ", size_t\ " "buflen" ");"
.HP \w'int\ ne_set_request_body_provider('u
.BI "int ne_set_request_body_provider(ne_request\ *" "req" ", ne_off_t\ " "length" ", ne_provide_body\ " "provider" ", void\ *" "userdata" ");"
.SH "DESCRIPTION"
.PP
The
\fBne_set_request_body_buffer\fR
function specifies that a message body should be included with the body, which is stored in the
\fIcount\fR
bytes buffer
\fIbuf\fR\&.
.PP
The
\fBne_set_request_body_fd\fR
function can be used to include a message body with a request which is read from a file descriptor\&. The body is read from the file descriptor
\fIfd\fR, which must be a associated with a seekable file (not a pipe, socket, or FIFO)\&.
\fIcount\fR
bytes are read, beginning at offset
\fIbegin\fR
(hence, passing
\fIbegin\fR
as zero means the body is read from the beginning of the file)\&.
.PP
For both above functions, the source of the request body must survive until the request has been dispatched; neither the memory buffer passed to
\fBne_set_request_body_buffer\fR
nor the file descriptor passed to
\fBne_set_request_body_fd\fR
are copied internally\&.
.PP
The
\fBne_set_request_body_provider\fR
function can be used to include a message body with a request which is provided by a callback function\&. The body length passed in the
\fIlength\fR
paramater must be positive, or if a chunked request body is required, as covered below,
\-1
can be used\&.
.PP
Before sending the body, the callback is invoked once with the
\fIbuflen\fR
parameter as
0\&. The body is then read by invoking the callback repeatedly until it returns
0
indicating the end\-of\-body\&. The callback return value must be as follows:
.PP
less than 0
.RS 4
An error; the request will be aborted\&. The session error string must be set via
\fBne_set_error\fR\&.
.RE
.PP
0
.RS 4
End of body\&.
.RE
.PP
between 0 and \fBbuflen\fR
.RS 4
Number of bytes of request body data\&.
.RE
.SS "Chunked request bodies"
.PP
Chunked request bodies are only sent when
\fBne_set_request_body_provider\fR
is used and
\-1
is passed as the
\fIlength\fR\&. In this case, the length of the request body does not have to be determined ahead of time\&. The end of the request body is indicated by returning
0
from the callback function\&.
.PP
Before using a chunked request body, the caller must determine that HTTP/1\&.1 is supported (by the origin server and any HTTP proxy server configured)\&. This can be done by testing that
\fBne_version_pre_http11\fR
returns zero after performing an
OPTIONS
or
HEAD
request\&.
.SH "SEE ALSO"
.PP
ne_request_create,
ne_set_error
.SH "AUTHOR"
.PP
\fBJoe Orton\fR
.RS 4
Author.
.RE
.SH "COPYRIGHT"
.br
